package com.easychat.service;

import java.io.File;
import java.util.List;

import com.easychat.entity.dto.MessageSendDTO;
import com.easychat.entity.dto.TokenUserInfoDTO;
import com.easychat.entity.query.ChatMessageQuery;
import com.easychat.entity.po.ChatMessage;
import com.easychat.entity.vo.PaginationResultVO;
import org.springframework.web.multipart.MultipartFile;


/**
 * 消息表，一个会话下有多条消息 业务接口
 */
public interface ChatMessageService {

	/**
	 * 根据条件查询列表
	 */
	List<ChatMessage> findListByParam(ChatMessageQuery param);

	/**
	 * 根据条件查询列表
	 */
	Integer findCountByParam(ChatMessageQuery param);

	/**
	 * 分页查询
	 */
	PaginationResultVO<ChatMessage> findListByPage(ChatMessageQuery param);

	/**
	 * 新增
	 */
	Integer add(ChatMessage bean);

	/**
	 * 批量新增
	 */
	Integer addBatch(List<ChatMessage> listBean);

	/**
	 * 批量新增/修改
	 */
	Integer addOrUpdateBatch(List<ChatMessage> listBean);

	/**
	 * 多条件更新
	 */
	Integer updateByParam(ChatMessage bean,ChatMessageQuery param);

	/**
	 * 多条件删除
	 */
	Integer deleteByParam(ChatMessageQuery param);

	/**
	 * 根据MessageId查询对象
	 */
	ChatMessage getChatMessageByMessageId(Long messageId);


	/**
	 * 根据MessageId修改
	 */
	Integer updateChatMessageByMessageId(ChatMessage bean,Long messageId);


	/**
	 * 根据MessageId删除
	 */
	Integer deleteChatMessageByMessageId(Long messageId);

	/**
	 * 保存聊天消息
	 * @param chatMessage 聊天消息
	 * @param tokenUserInfoDTO 发送人token信息
	 * @return
	 */
    MessageSendDTO saveMessage(ChatMessage chatMessage, TokenUserInfoDTO tokenUserInfoDTO);

	/**
	 * 保存聊天文件
	 * @param userId 发送人ID
	 * @param messageId 消息ID
	 * @param file 文件
	 * @param cover 缩略图
	 */
	void saveMessageFile(String userId, Long messageId, MultipartFile file, MultipartFile cover);

	/**
	 * 获取fileId对应的File对象(文件在本地)
	 * @param tokenUserInfoDTO 对应要下载文件的客户端（消息接收方）
	 * @param fileId 文件ID（非头像文件，fileId为messageId，纯数字）
	 * @param showCover 是否展示封面
	 * @return File对象
	 */
	File downloadFile(TokenUserInfoDTO tokenUserInfoDTO, Long fileId, Boolean showCover);
}